﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace msdcp
{
    /// <summary>
    /// Класс предназначен для добавления записи в журнал ошибок.
    /// По умолчанию журнал создается в папке "Мои документы" текущего
    /// пользователя и называется "DataAnalyzerErrorReport.log"
    /// </summary>
    internal class ErrorReport
    {
        #region Закрытые поля класса
        private string currentFolderPath;
        private string logName;
        private string messageText; 
        #endregion

        #region Свойства
        public string FolderForLog
        {
            get { return currentFolderPath; }
            set { currentFolderPath = value; }
        }

        public string LogName
        {
            get { return logName; }
            set { logName = value; }
        }

        public string Text
        {
            get { return messageText; }
            set { messageText = value; }
        } 
        #endregion

        #region Конструкторы

        /// <summary>
        /// Конструктор по умолчанию. Все необходимые поля 
        /// пользователь может проинициализировать через свойства.
        /// </summary>
        public ErrorReport()
        {
            currentFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            logName = "ErrorReport.log";
            messageText = "";
        }

        /// <summary>
        /// Конструктор.
        /// </summary>
        /// <param name="message">Текст сообщения.</param>
        public ErrorReport(string message)
        {
            currentFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
            logName = "ErrorReport.log";
            messageText = message;
        }

        /// <summary>
        /// Конструктор.
        /// </summary>
        /// <param name="folderPath">Полный путь к папке, в которой будет создаваться лог.</param>
        /// <param name="message">Текст сообщения, которое будет добавлено в лог.</param>
        public ErrorReport(string folderPath, string message)
        {
            currentFolderPath = folderPath;
            logName = "ErrorReport.log";
            messageText = message;
        } 
        #endregion

        #region Открытые методы
        /// <summary>
        /// Добавить подготовленное сообщение в лог.
        /// </summary>
        public void AddToLog()
        {
            StringBuilder sb = new StringBuilder();
            DateTime dt = DateTime.Now;
            sb.AppendFormat("{0} {1}{2}", dt.ToShortDateString(),
                dt.ToLongTimeString(), Environment.NewLine);
            sb.AppendLine(messageText);
            sb.AppendLine("--------------------------------------------------------------------");
            sb.AppendLine();

            try
            {
                using (StreamWriter sw = new StreamWriter(Path.Combine(currentFolderPath, logName), true))
                {
                    sw.Write(sb.ToString());
                }
            }
            catch { }
        } 
        #endregion
        
    }
}
